// 用于在不修改组件的情况下配置某些组件的常规配置

import type { SorterResult } from '../components/Table';

type DefaultFilterFnData = Partial<Recordable<string[]>>;

interface TableComponentSetting {
  fetchSetting: {
    pageField: string;
    sizeField: string;
    listField: string;
    totalField: string;
  };
  pageSizeOptions: string[];
  defaultPageSize: number;
  defaultSize: 'default' | 'small' | 'middle' | 'large';
  defaultSortFn: (sortInfo: SorterResult) => any;
  defaultFilterFn: (data: DefaultFilterFnData) => DefaultFilterFnData;
  showIndexColumn: boolean;
  defaultAlign: 'left' | 'right' | 'center';
}

interface ComponentSetting {
  table: TableComponentSetting;
  scrollbar: {
    native: boolean;
  };
}

const componentSetting: ComponentSetting = {
  // 表格配置
  table: {
    // 表格接口请求通用配置，可在组件prop覆盖
    // 支持 xxx.xxx.xxx 格式
    fetchSetting: {
      // 传给后台的当前页字段
      pageField: 'page',
      // 传给后台的每页显示多少条的字段
      sizeField: 'pageSize',
      // 接口返回表格数据的字段
      listField: 'items',
      // 接口返回表格总数的字段
      totalField: 'total',
    },
    // 可选的分页选项
    pageSizeOptions: ['10', '20', '30'],
    // 默认每页显示多少条
    defaultPageSize: 10,
    // 表格默认大小
    defaultSize: 'middle',
    // 默认排序方法
    defaultSortFn: (sortInfo: SorterResult) => {
      const { field, order } = sortInfo;
      if (field && order) {
        return {
          // 传递给您的后端服务器的排序字段
          field,
          // Sorting method passed to the background asc/desc
          // 排序方式 asc/desc
          order,
        };
      } else {
        return {};
      }
    },
    // 自定义过滤方法
    defaultFilterFn: (data: Partial<Recordable<string[]>>) => {
      return data;
    },

    /* feat: 自己后期的补充 */

    // 是否默认展示表格项中的序号列
    showIndexColumn: false,
    // 表格列的默认对其方式
    defaultAlign: 'center',

    /* feat: end */
  },
  // 滚动组件配置
  scrollbar: {
    // 是否使用原生滚动样式
    // 开启后，菜单，弹窗，抽屉会使用原生滚动条组件
    native: false,
  },
};

export default componentSetting;
